package ve.com.wayoyo.wuml_case.DibujoDiagramas;

import java.io.File;
import java.util.ArrayList;

import ve.com.wayoyo.wuml_case.UserPref;
import ve.com.wayoyo.wuml_case.Exceptions.TituloVacioExecption;

import android.graphics.Canvas;
import android.graphics.Point;
import android.os.Environment;
import android.widget.Toast;

public class DiagramaClases extends Diagrama {

	
	private ArrayList<Componente> _components = new ArrayList<Componente>();
	private ArrayList<CompConector> _connectors =  new ArrayList<CompConector>();
	private int lastIdGiven = 0; 
	
	
	@Override
	public void AgregarComponente(Componente nuevo) {
		nuevo.setID(lastIdGiven + 1);
		lastIdGiven += 1;
		_components.add(nuevo);
	}

	@Override
	public void EliminarComponente(int id) {
		// TODO Auto-generated method stub
		
	}
	
	@Override
	public void exportarPNG() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void Dibujar(Canvas c,int offSetX,int offSetY, float GlobalScale) {
		for (Componente Value : _components) {
			//if(Value.CalcularVisibilidad(offSetX,offSetY,GlobalScale)){
				Value.Dibujar(c, false, GlobalScale,offSetX,offSetY);
			//}
		}
		
	}

	@Override
	public boolean checkOnTouch(Point touchPoint,String type) {
		boolean respuesta = false;
		if(type.equals("Select")){
			for (Componente Value : _components) {
				if(Value.calcularTouch(touchPoint) == true && respuesta == false){
					respuesta = true;
					SelectedItem = Value;
					break;
				}
			}
		}
		if(type.equals("Connect")){
			for (Componente Value : _components) {
				if(Value.calcularTouch(touchPoint) == true && respuesta == false){
					respuesta = true;
					CompConector nuevo = new CompConector(SelectedItem.ID, Value.ID);
					nuevo.CalcularConexiones(SelectedItem, Value);
					SelectedItem._conectorsBegining.add(nuevo);
					Value._conectorsEnd.add(nuevo);
				}
			}	
		}
		return respuesta;
	}

	@Override
	public void resetFocus() {
		for (Componente Value : _components) {
			Value.removeFocus();
		}
		SelectedItem = null;
	}

	@Override
	public boolean validarNombre(String nuevo) throws TituloVacioExecption {
		boolean respuesta = true;
		if(nuevo.length() < 1){
			throw new TituloVacioExecption();
		}
		if(UserPref.getInstancia().isUsingConvections() == false){
			for (Componente Value : _components) {
				if(Value.getTitulo().equals(nuevo))
					respuesta = false;
			}
		}else{
			String nuevoModf = nuevo.substring(0,1).toUpperCase() + nuevo.substring(1);
			for (Componente Value : _components) {
				if(Value.getTitulo().equals(nuevoModf))
					respuesta = false;
			}
		}
		return respuesta;
	}
	
	@Override
	public void moverItemSeleccionado(int distX, int distY) {
		if(SelectedItem != null){
			SelectedItem.mover(distX, distY);
		}
	}

	public void agregarAtributo(CompAtributo comp)
	{
		((CompClase)SelectedItem).addAtributo(comp);
	}

}
